
#ifndef __PROPERTY_H__
#define	__PROPERTY_H__

#include "STLTypes.h"
#include "Pointer.h"
#include <Windows.h>

class Type
{
public:

	Type() {}
	~Type() {}

	virtual uint32 getSize() const = 0;

	virtual void getType(void* pValue) = 0;

};

class TypeVoid : public Type
{
public:

	TypeVoid() {}
	~TypeVoid() {}

	virtual uint32 getSize() const = 0;

	virtual void getType(void* pValue) = 0;

};

class Uinteger8 : public Type
{
public:
	typedef	uint8	Type;

	Uinteger8() {}
	~Uinteger8() {}

	virtual uint32 getSize() const { return 0; }

	virtual void getType(void* pValue) {}

};

class Integer8 : public Type
{
public:
	Integer8() {}
	~Integer8() {}

	virtual uint32 getSize() const { return 0; }
};

class Uinteger16 : public Type
{
public:
	Uinteger16() {}
	~Uinteger16() {}

	virtual uint32 getSize() const { return 0; }
};

class Integer16 : public Type
{
public:
	Integer16() {}
	~Integer16() {}

	virtual uint32 getSize() const { return 0; }
};

class Uinteger32 : public Type
{
public:
	Uinteger32() {}
	~Uinteger32() {}

	virtual uint32 getSize() const { return 0; }
};

class Integer32 : public Type
{
public:
	Integer32() {}
	~Integer32() {}

	virtual uint32 getSize() const { return 0; }
};

class Uinteger64 : public Type
{
public:
	Uinteger64() {}
	~Uinteger64() {}

	virtual uint32 getSize() const { return 0; }
};

class Integer64 : public Type
{
public:
	Integer64() {}
	~Integer64() {}

	virtual uint32 getSize() const { return 0; }
};

class Uinteger128 : public Type
{
public:
	Uinteger128() {}
	~Uinteger128() {}

	virtual uint32 getSize() const { return 0; }
};

class Integer128 : public Type
{
public:
	Integer128() {}
	~Integer128() {}

	virtual uint32 getSize() const { return 0; }
};

class TypeFloat : public Type
{
public:
	TypeFloat() {}
	~TypeFloat() {}

	virtual uint32 getSize() const { return 0; }
};

class TypeDouble : public Type
{
public:
	TypeDouble() {}
	~TypeDouble() {}

	virtual uint32 getSize() const { return 0; }
};

class TypeString : public Type
{
public:
	TypeString() {}
	~TypeString() {}

	virtual uint32 getSize() const { return 0; }
};

class TypeWString : public Type
{
public:
	TypeWString() {}
	~TypeWString() {}

	virtual uint32 getSize() const { return 0; }
};

class TypeStruct : public Type
{
public:
	TypeStruct() {}

	~TypeStruct() {}

protected:
	std::vector<Pointer<Type> >		m_vecType;
};

class TypeFunction : public TypeStruct
{
public:
	TypeFunction() {}

	~TypeFunction() {}
};

class TypeEnum : public TypeStruct
{
public:
	TypeEnum() {}

	~TypeEnum() {}
};

class TypeClass : public TypeStruct
{
public:
	TypeClass() {}

	~TypeClass() {}
};





#endif // __PROPERTY_H__
